package com.brds.netty.io;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.util.CharsetUtil;
import io.netty.util.ReferenceCountUtil;

/**
 * @author barudisshu
 */
@ChannelHandler.Sharable
public class DiscardHandler extends ChannelInboundHandlerAdapter {

    // 计算机资源是有限的，重载该方法后，代码最后应该显式地释放资源
    // Netty对未释放的资源以一个WARN-level的日志记录，以简单的方式找出代码中出问题的实例
    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        ctx.write(msg);

        ByteBuf in = (ByteBuf) msg;
        System.out.println("Server received: " + in.toString(CharsetUtil.UTF_8));
        ReferenceCountUtil.release(msg);

        // 因为msg已经被释放，你不能获得msg的任何内容，否则会报
        // System.out.println("Invalid to access: " + in.toString(CharsetUtil.UTF_8));
    }
}
